package cl.tinet.trainee.tarea6b.ejb;

import java.util.ArrayList;

import javax.ejb.Remote;

import cl.tinet.trainee.tarea6b.model.Usuario;
import cl.tinet.trainee.tarea6b.model.UsuarioNoEncontradoException;

/**
 * Interfaz que define los metodos a implementar por la clase Bean.
 * 
 * @author Frmancil
 * 
 */
@Remote
public interface InterfazUsuarioBean {
	/**
	 * Recibe un usuario creado desde la capa web y lo agrega a una coleccion de
	 * objetos.
	 * 
	 * @param nuevoUsuario
	 *            Es el objeto usuario que recibe el metodo y agrega a la base
	 *            de datos.
	 */
	public void agregarUsuario(Usuario nuevoUsuario);

	/**
	 * Recibe del bean un usuario y lo elimina de la coleccion de objetos.
	 * 
	 * @param usuarioAEliminar
	 *            Es el objeto usuario que recibe el metodo, para buscarlo y
	 *            eliminar a su par.
	 * @throws UsuarioNoEncontradoException 
	 */
	public void borrarUsuario(Usuario usuarioAEliminar) throws UsuarioNoEncontradoException;

	/**
	 * Recibe del bean un usuario y lo actualiza en la coleccion de objetos.
	 * 
	 * @param usuarioAActualizar
	 *            Es el objeto usuario que recibe el metodo, para buscarlo y
	 *            actualizar sus datos.
	 * @throws UsuarioNoEncontradoException 
	 */
	public void actualizarUsuario(Usuario usuarioAActualizar) throws UsuarioNoEncontradoException;

	/**
	 * Recibe del bean un usuario y lee sus atributos desde la coleccion de
	 * objetos.
	 * 
	 * @param username
	 *            Atributo para hacer busqueda de objeto.
	 * @return Usuario encontrado es retornado para desplegar sus datos.
	 */
	public Usuario leerUsuario(String username);

	/**
	 * Recibe del bean un String con el atributo username y lee sus atributos
	 * desde la coleccion de objetos.
	 * 
	 * @param usuarioABuscar
	 *            Objeto tipo usuario que se busca en la coleccion de objetos.
	 * @return Usuario encontrado es retornado para desplegar sus datos.
	 * @throws UsuarioNoEncontradoException 
	 */
	public Usuario buscarUsuario(Usuario usuarioABuscar) throws UsuarioNoEncontradoException;

	/**
	 * Metodo que retorna la lista de todos los usuarios.
	 * 
	 * @return Retorna una lista con todos los usuarios de la coleccion de
	 *         objetos.
	 */
	public ArrayList<Usuario> listarUsuarios();

}
